package com.wyy.mapper;

import com.wyy.pojo.Articles;
import com.wyy.pojo.LikeArticle;
import com.wyy.pojo.model.LabelSearch;
import org.apache.ibatis.annotations.*;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * @program: gytcb
 * @author: 吴磊
 * @create: 2021-06-03 20:21
 */
@Repository
public interface ArticleMapper {


    /**
     * 获取热门的文章标签
     *
     * @return
     */
    @Select("select article_label\n" +
            "from (select count(article_label) count, article_label\n" +
            "      from articles\n" +
            "      group by article_label) as articleLabel\n" +
            "order by count desc\n" +
            "limit 0,10")
    List<LabelSearch> getHotArticleLabel();


    /**
     * 根据文章内容模糊查询文章
     * 如果userId为空就说明是查询全部
     *
     * @param articles
     * @return
     */
    List<Articles> getArticleByArticleContentLikeSearch(Articles articles);

    /**
     * 根据文章模糊内容查看文章数量
     *
     * @param articles
     * @return
     */
    Integer getCountByArticleContent(Articles articles);


    /**
     * 根据文章ID查看文章
     *
     * @param articleId
     * @return
     */
    Articles getArticleByArticleId(@Param("articleId") String articleId);


    /**
     * 插入文章
     *
     * @param articles
     * @return
     */
    Integer insertArticle(Articles articles);

    /**
     * 根据文章Id删除文章
     *
     * @param articleId
     * @return
     */
    Integer deleteArticleById(@Param("articleId") String articleId);

    /**
     * 编辑帖子
     *
     * @param articles
     * @return
     */
    Integer updateArticle(Articles articles);

    /**
     * 添加点赞帖子
     *
     * @param likeArticle
     * @return
     */
    @Insert("insert into like_article values(#{userId},#{articleId})")
    Integer insertLikeArticle(LikeArticle likeArticle);

    /**
     * 删除点赞帖子
     *
     * @param likeArticle
     * @return
     */
    @Delete("delete from like_article where user_id = #{userId} and article_id = #{articleId}")
    Integer deleteLikeArticle(LikeArticle likeArticle);

    /**
     * 通过用户id和文章Id查看是否点赞
     *
     * @param likeArticle
     * @return
     */
    @Select("select count(1) from like_article where user_id = #{userId} and article_id = #{articleId}")
    Integer getLikeArticleByUserIdAndArticleId(LikeArticle likeArticle);

    /**
     * 增加文章的点赞数
     *
     * @param articleId
     * @return
     */
    @Update("update articles set article_like_count = article_like_count + 1 where article_id = #{articleId}")
    Integer incrArticleLikeCount(@Param("articleId") String articleId);

    /**
     * 减少文章的点赞数
     *
     * @param articleId
     * @return
     */
    @Update("update articles set article_like_count = article_like_count - 1 where article_id = #{articleId}")
    Integer decrArticleLikeCount(@Param("articleId") String articleId);

    /**
     * 查询文章总数
     *
     * @param userId
     * @return
     */
    Integer getArticleCount(@Param("userId") String userId);

    /**
     * 查询用户没有匿名的文章数量
     *
     * @param userId
     * @return
     */
    Integer getArticleCountNot(@Param("userId") String userId);

    /**
     * 查询规定时间段内的文章总数
     *
     * @param timeToString
     * @return
     */
    @Select("select count(1) from articles where article_date >= #{timeToString}")
    Integer getArticleCountByCream(@Param("timeToString") String timeToString);

    /**
     * 通过热门（点赞数）文章排序
     *
     * @param curPage
     * @return
     */
    List<Articles> getArticleByHot(@Param("curPage") int curPage);


    /**
     * 获取最新的文章（如果用户Id不为空，则只获取用户的）
     *
     * @param curPage
     * @param userId
     * @return
     */
    List<Articles> getArticleByLatest(@Param("curPage") int curPage, @Param("userId") String userId);

    /**
     * 获取用户没有匿名的文章
     *
     * @param curPage
     * @param userId
     * @return
     */
    List<Articles> getArticleByLatestNot(@Param("curPage") int curPage, @Param("userId") String userId);


    /**
     * 查询精华帖子
     *
     * @param timeToString
     * @param curPage
     * @return
     */
    List<Articles> getArticleByCream(@Param("timeToString") String timeToString, @Param("curPage") int curPage);

    /**
     * 通过模糊搜索标签获取文章
     *
     * @param articleLabel
     * @param curPage
     * @return
     */
    List<Articles> getArticleBySearchLabel(@Param("articleLabel") String articleLabel, @Param("curPage") int curPage);

    /**
     * 获取模糊查询标签的帖子数量
     *
     * @param articleLabel
     * @return
     */
    @Select("select count(1) from articles where article_label like #{articleLabel}")
    Integer getArticleBySearchLabelCount(@Param("articleLabel") String articleLabel);

}
